#include <iostream>
#include <string>
#include "FriendList.pb.h"
#include "mprpcapplication.h"
#include "rpcprovider.h"
#include <vector>
#include"logger.h"
class FriendService : public fixbug::FriendServiceRpc
{
    public:
        std::vector<std::string> GetFriendList(uint32_t userid)//本地业务
        {
            std::cout<<"do GetFriendList service!"<<"userid"<<userid<<std::endl;
            std::vector<std::string>vec;
            vec.push_back("zhangsan");
            vec.push_back("lisi");
            vec.push_back("wangwu");
            vec.push_back("zhaoliu");
            return vec;
        }

        void GetFriendList(::google::protobuf::RpcController* controller,
            const ::fixbug::GetFriendListRequest* request,
            ::fixbug::GetFriendListResponse* response,
            ::google::protobuf::Closure* done)
            {
                //protobuf已经接受好了传输过来的参数并且在request中已经做好了反序列化，我们直接拿出来用，在本地处理
                uint32_t userid=request->userid();
                std::vector<std::string> friendlist=GetFriendList(userid);

                //处理完之后该写入响应了
                fixbug::ResultCode* code=response->mutable_result();
                code->set_errcode(0);
                code->set_errmsg("");
                for(std::string &name : friendlist)
                {
                    std::string *p = response->add_friends();
                    *p=name;
                }
                
                done->Run();
            }
};

int main(int agrc,char* argv[])
{
    //使用日志
    LOG_INFO("first log message!");
    LOG_ERR("%s:%s:%d",__FILE__,__FUNCTION__,__LINE__);//显示在哪一个路径下的哪一个文件的多少行打印的日志信息

    //使用框架前，一般都需要先调用框架的初始化操作(做一些配置、日志的初始化)
    //以provider -i config.conf形式输入，从config.conf中读取网络服务器及配置中心的地址或者端口号
    MprpcApplication::Init(agrc,argv);//将来需要一些ip地址和端口号，这些不能写死，需要在环境变量中获取

    RpcProvider provider;//专门在框架上发布服务的,provider是一个rpc网络服务对象，将UserService对象发布到rpc节点上
    provider.NotifyService(new FriendService());

    //启动一个rpc服务发布节点，Run以后，进程进入阻塞状态，等待远程的rpc调用请求
    provider.Run();
    return 0;
}